﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DiveManager
{
    public partial class AddProduct : Form
    {
        protected DiveDatabaseEntities diveDatabase;
        
        //Variablen zum Auslesen der Eingabefelder
        public int sn_pflicht=0;
        public int bestand_kontrolle=0;
        public int lager_kontrolle = 0;
        public string lagerfach;
        public decimal min_bestand;
        public decimal anfangs_bestand;
        public string einheit;
        public string w_gruppe;
        public string uw_gruppe;
        public string farbe;
        public string groesse;
        public string bezeichnung;
        public string beschreibung;
        public double vk_preis;
        public double vk_club;
        public double ek_preis;
        public string bestnr_lieferant;
        public int mwst_satz;
        Guid lieferant;
        public int ean_code;
        public string hyperlink_intern;
        Guid guid = System.Guid.NewGuid();
        

        
        public AddProduct()
        {
            InitializeComponent();

            // Init Database
            diveDatabase = new DiveDatabaseEntities();
        }

        private void AddProduct_Load(object sender, EventArgs e)
        {

            //Warengruppen in txWarengruppen schreiben

            //alle freien Lagerfächer in txLagerfach schreiben


            //Nächste freie Artikelnummer aus Tabelle 
            var maxArtikelNr = (from a in diveDatabase.Product_Main
                                select a.Artikel_Nr).Max();



            txArtikelnr.Text = maxArtikelNr.ToString();

            //Generieren einer neuen Artikelnummer 

            int artikelnr_alt = Convert.ToInt32(txArtikelnr.Text);
            int artikelnr_neu = artikelnr_alt + 1;
            txArtikelnr.Text = artikelnr_neu.ToString();

        }

        private void Button_Feature_Add_Click(object sender, EventArgs e)
        {
            //Feature aus TextBox tbFeature auslesen und der Liste lbFeatures hinzufügen
        }

        private void Button_Featur_Delete_Click(object sender, EventArgs e)
        {
            //Aus der Lise lbFeatures ausgewähltes Feature löschen
        }

        private void Button_Kopieren_Click(object sender, EventArgs e)
        {
            //Nächste freie Artikelnummer aus Tabelle 
            var maxArtikelNr = (from a in diveDatabase.Product_Main
                                select a.Artikel_Nr).Max();



            txArtikelnr.Text = maxArtikelNr.ToString();

            //Generieren einer neuen Artikelnummer 

            int artikelnr_alt = Convert.ToInt32(txArtikelnr.Text);
            int artikelnr_neu = artikelnr_alt + 1;
            txArtikelnr.Text = artikelnr_neu.ToString();

            //Button_Anlegen sichtbar machen
            this.Button_Anlegen.Visible = true;
        }

        private void Button_Anlegen_Click(object sender, EventArgs e)
        {
            //Sämtliche Eingabefelder werden ausgelesen
            
                //->sn_pflicht übernehmen                  
                //->bestand_kontrolle übernehmen
                //->lager_kontrolle übernehmen
            lagerfach = txLagerfach.Text;           //Auslesen von txLagerfach
            min_bestand = txMinBestand.Value;       //Auslesen von txMinBestand
            anfangs_bestand = txBestand.Value;      //Auselsen von txBestand
            einheit = txEinheit.Text;               //Auslesen von txEinheit
            farbe = txFarbe.Text;                   //Auslesen von txFarbe
            groesse = txGroesse.Text;               //Auslesen von txGroesse
            beschreibung = txBeschreibung.Text;     //Auslesen von txBeschreibung
            bezeichnung = txBezeichnung.Text;       //Auslesen von txBezeichnung
             

            w_gruppe = txWarengruppe.Text;          //Auslesen von txWarengruppe
            uw_gruppe = txUntergruppe.Text;         //Auslesen von txUntergruppe

            vk_preis =  System.Convert.ToDouble(txVKPreis.Text);
            vk_club = System.Convert.ToDouble(txVKClub.Text);
            ek_preis = System.Convert.ToDouble(txEKPreis.Text);
            bestnr_lieferant = txBestNr.Text;
            ean_code = Convert.ToInt32(txEANCode.Text);
            hyperlink_intern = txHyperlink.Text;




            //Zu w_gruppe und uw_gruppe müssen die entsprechenden gruppennummern 
            //aus der Tabelle Warengruppen/Unterwarengruppen gesucht werden

            //Eingaben werden überprüft
            //Auslesen der höchsten bestehenden Artikelnummer aus der DB
            //Höchste bestehehende Artikelnummer plus 1
            
            //Artikel wird der Datenbank hinzugefügt.
            //????????????????????????????????????????????????????????????????????????
            //Auslesen der höchsten bestehenden Artikelnummer aus der DB
            //Höchste bestehehende Artikelnummer plus 1
            var maxArtikelNr = (from a in diveDatabase.Product_Main
                                select a.Artikel_Nr).Max();


            
           txArtikelnr.Text = maxArtikelNr.ToString();
                
            //????????????????????????????????????????????????????????????????????????
                            
            //Artikel wird der Datenbank hinzugefügt
            //--------------------------------------------------------------------
            //In die Tabelle Product_Main schreiben
            // Generate new Object for DB
            Product_Main newProduct_Main = new Product_Main();
            newProduct_Main.ID = guid;
            newProduct_Main.Artikel_Nr = Convert.ToInt32(txArtikelnr.Text);
            newProduct_Main.Name = bezeichnung;
            // Add to DB
            diveDatabase.AddToProduct_Main(newProduct_Main);
            diveDatabase.SaveChanges();
            //--------------------------------------------------------------------
            //->In die Tabelle Product_Description schreiben
            // Generate new Object for DB
            Product_Description newProduct_Description = new Product_Description();
            newProduct_Description.ID = guid;
            newProduct_Description.Description = beschreibung;
            // Add to DB
            diveDatabase.AddToProduct_Description(newProduct_Description);
            diveDatabase.SaveChanges();
            //--------------------------------------------------------------------
            //->In die Tabelle Product_Specifications schreiben
            // Generate new Object for DB
            Product_Specifications newProduct_Specifications = new Product_Specifications();
            newProduct_Specifications.ID = guid;
            newProduct_Specifications.Colour = farbe;
            newProduct_Specifications.Size = groesse;
            // Add to DB
            diveDatabase.AddToProduct_Specifications(newProduct_Specifications);
            diveDatabase.SaveChanges();
            //--------------------------------------------------------------------
            //In die Tabelle Product_Supplies
            //--------------------------------------------------------------------
            //In die Tabelle Product_Features schreiben
            //--------------------------------------------------------------------
            //->In die Tabelle Product_ProductGroups schreiben
            //--------------------------------------------------------------------
            //->In die Tabelle Product_Storage schreiben
            // Generate new Object for DB
            Product_Storage newProduct_Storage = new Product_Storage();
            newProduct_Storage.ID = guid;
            //-->newProduct_Storage.Bestand = anfangs_bestand_int;
            newProduct_Storage.Einheit = einheit;
            newProduct_Storage.Set_Min_Bestand = bestand_kontrolle;
            //-->newProduct_Storage.Min_Bestand = min_bestand;
            newProduct_Storage.Set_SerienNr = sn_pflicht;
            // Add to DB
            diveDatabase.AddToProduct_Storage(newProduct_Storage);
            diveDatabase.SaveChanges();
            //--------------------------------------------------------------------
            //In die Tabelle Product_Salesettings schreiben
            Product_SaleSettings newProduct_SaleSettings = new Product_SaleSettings();
            newProduct_SaleSettings.ID = guid;
            newProduct_SaleSettings.VK_Preis = vk_preis;
            newProduct_SaleSettings.VK_Club = vk_club;
            newProduct_SaleSettings.EK_Preis = ek_preis;
            newProduct_SaleSettings.BestNr_Lieferant = bestnr_lieferant;
            newProduct_SaleSettings.EAN_Code = ean_code;
            newProduct_SaleSettings.Lieferant = lieferant;
            newProduct_SaleSettings.Hyperlink_Intern = hyperlink_intern;
            // Add to DB
            diveDatabase.AddToProduct_SaleSettings(newProduct_SaleSettings);
            diveDatabase.SaveChanges();
            //--------------------------------------------------------------------
            //In die Tabelle Product_Explorer schreiben
            //--------------------------------------------------------------------
            //In die Tabelle Product_Websettings schreiben
            //--------------------------------------------------------------------
           
            //Auslesen der Artikelnummer des gerade angelegten Artikels

            //Bestätigung des erfolgreichen anlegen mit MessageBox
            MessageBox.Show("Artikel wurde angelegt mir ArtNr:");
            //Artikelnummer soll in der Meldung mit angezeigt werden

            //Button_Neu, Button_Kopieren, Button_LabelPrint sichbar machen.
            this.Button_Kopieren.Visible = true;
            this.Button_Neu.Visible = true;
            this.Button_LabelPrint.Visible = true;
            //Button_Anlegen ausblenden
            this.Button_Anlegen.Visible = false;
            //Artikeldaten bleiben stehen bis Button_Neu oder Button_Kopieren betätigt werden.
            
        }

        private void Button_Neu_Click(object sender, EventArgs e)
        {   
            
            //Alle Eingabefelder leeren
            this.txBezeichnung.Clear();
            this.txBeschreibung.Clear();
            this.txFarbe.Clear();
            this.txGroesse.Clear();
            this.txZubehoer.Clear();
            this.txFeatures.Clear();
            //lbZubehör leeren
            //lbFeatur leeren
            this.txBestand.Value =0;
            this.txEinheit.Clear();
            //????this.txWarengruppe.Clear();
            //????this.txUntergruppe.Clear();
            this.txMinBestand.Value =0;
            txVKClub.Clear();
            txVKPreis.Clear();
            txLieferant.Clear();
            txLieferantGUID.Clear();
            txEKPreis.Clear();
            txBestNr.Clear();
            txHyperlink.Clear();
            txEANCode.Clear();


            //Seriennummer Pflicht setzten wird deaktiviert 
            sn_pflicht = 0;
            //Der Button_Seriennummer wird wieder sichtbar
            this.Button_Seriennummer.Visible = true;
            //Der Button_Sn_Plicht_Off wird unsichtbar
            this.Button_Sn_Pflicht_Off.Visible = false;

            //der Button_Bestandskontrolle_Off unsichtbar
            this.Button_Bestandskontrolle_Off.Visible = false;
            //der Button_Bestandskontrolle wird sichtbar
            this.Button_Bestandskontrolle.Visible = true;
            //Ausblenden der Eingabeelemente für die Bestandskontrolle
            this.txMinBestand.Visible = false;
            this.Label_MinBestand.Visible = false;
            //Bestandskontrolle wird deaktiviert
            bestand_kontrolle = 0;

            //Abschalten die Lagerhaltungskontrolle
            lager_kontrolle = 0;
            //Button_Lagerkontrolle_Off unsichtbar
            this.Button_Lagerkontrolle_Off.Visible = false;
            //Der Button_Lagerkontrolle wird sichtbar
            this.Button_Lagerkontrolle.Visible = true;
            //Ausblenden der Eingabeelemente
            this.txLagerfach.Visible = false;
            this.Label_Lagerfach.Visible = false;

            



            //Button_Anlegen sichtbar machen
            this.Button_Anlegen.Visible = true;
        }

        private void Button_Abbrechen_Click(object sender, EventArgs e)
        {
            //Form schließen
            this.Close();
        }

        private void Button_LabelPrint_Click(object sender, EventArgs e)
        {
            //Drucken der Artikeletiketten
        }

        private void Button_Zubehoer_Add_Click(object sender, EventArgs e)
        {
            //Zubehoer aus TextBox tbZubehoer auslesen und der Liste lbZubehoer hinzufügen
        }

        private void Button_Zubehoer_Delete_Click(object sender, EventArgs e)
        {
            //Aus der Lise lbZubehoer ausgewähltes Zubehoer löschen
        }

        private void Button_Seriennummer_Click(object sender, EventArgs e)
        {
            //Setzt die Pflichteingabe der Seriennummer beim Verkaufsvorgang
            //Standartmäßig ist die Eingabe deaktiviert
            //Bei wird der BUtton_Sn_Plicht_Off sichtbar
            this.Button_Sn_Pflicht_Off.Visible = true;
            //Button_Seriennummer unsichtbar machen
            this.Button_Seriennummer.Visible = false;
            //Setzten der Pflichteingabe
            sn_pflicht = 1;

        }

        private void Button_Bestandskontrolle_Click(object sender, EventArgs e)
        {
            //Setzt die Bestanskontrolle für den Artikel
            bestand_kontrolle = 1;
            //Standartmäßig nicht aktiviert
            //Bei klick wird der Button_Bestandskontrolle_Off sichtbar
            this.Button_Bestandskontrolle_Off.Visible = true;
            //der Button_Bestandskontrolle wird unsichtbar
            this.Button_Bestandskontrolle.Visible = false;
            //Einbleden der Eingabeelemente für die Bestandskontrolle
            this.txMinBestand.Visible = true;
            this.Label_MinBestand.Visible = true;
        }

        private void Button_Lagerkontrolle_Click(object sender, EventArgs e)
        {
            //Setzt die Lagerhaltungskontrolle
            lager_kontrolle = 1;
            //Standartmäßig nicht aktiviert
            //Bei Klick wird Button_Lagerkontrolle_Off sichtbar
            this.Button_Lagerkontrolle_Off.Visible = true;
            //Der Button_Lagerkontrolle wird unsichtbar
            this.Button_Lagerkontrolle.Visible = false;
            //Einbleden der Eingabeelemente
            this.txLagerfach.Visible = true;
            this.Label_Lagerfach.Visible = true;

            //In txLagerfach werden jetzt alle freien Lagerfächer angezeigt
        }

        private void txWarengruppe_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Wenn der User eine Warengruppe auswählt, werden die dazugehörenden
            //Unterwarengruppen in txUntergruppen ausgegeben
        }

        private void Button_Sn_Pflicht_Off_Click(object sender, EventArgs e)
        {
            //Seriennummer Pflicht setzten wird deaktiviert 
            sn_pflicht = 0;
            //Der Button_Seriennummer wird wieder sichtbar
            this.Button_Seriennummer.Visible = true;
            //Der Button_Sn_Plicht_Off wird unsichtbar
            this.Button_Sn_Pflicht_Off.Visible = false;
        }

        private void Button_Bestandskontrolle_Off_Click(object sender, EventArgs e)
        {
            //Bei klick wird der Button_Bestandskontrolle_Off unsichtbar
            this.Button_Bestandskontrolle_Off.Visible = false;
            //der Button_Bestandskontrolle wird sichtbar
            this.Button_Bestandskontrolle.Visible = true;
            //Ausblenden der Eingabeelemente für die Bestandskontrolle
            this.txMinBestand.Visible = false;
            this.Label_MinBestand.Visible = false;
            //Bestandskontrolle wird deaktiviert
            bestand_kontrolle = 0;
        }

        private void Button_Lagerkontrolle_Off_Click(object sender, EventArgs e)
        {
            //Abschalten die Lagerhaltungskontrolle
            lager_kontrolle = 0;
            //Bei Klick wird Button_Lagerkontrolle_Off unsichtbar
            this.Button_Lagerkontrolle_Off.Visible = false;
            //Der Button_Lagerkontrolle wird sichtbar
            this.Button_Lagerkontrolle.Visible = true;
            //Ausblenden der Eingabeelemente
            this.txLagerfach.Visible = false;
            this.Label_Lagerfach.Visible = false;
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void btLieferant_Click(object sender, EventArgs e)
        {
            //Öffnen der Lieferantenliste und auswählen eines Lieferanten
            using (Product_ChooseSupplier dialog = new Product_ChooseSupplier(this))
            dialog.ShowDialog();
            //Rückgabewert ist GIUD des Lieferanten
            //GUID ausgeben in txLieferantenGUID
            Guid id_guid = new Guid(txLieferantGUID.Text);
            //Abfrage in DB nach Lieferantennamen
            var query_main = from sm in diveDatabase.Supplier_Main
                             where sm.ID == id_guid
                             select sm;

            foreach (var sm in query_main)
            {
                txLieferant.Text = sm.Firma;
            }
            //GUID wird in DB gespeichert
            txLieferantGUID.Visible = true;
            lieferant = new Guid(txLieferantGUID.Text);
            txLieferantGUID.Visible = false;
        }

        public string Lieferant
        {
            get { return txLieferantGUID.Text; }
            set { txLieferantGUID.Text = value; }
        }
    }
}
